package Day015_File类_递归_IO流.demo07_字节输入流;

import java.io.FileInputStream;

/**
 * @author zhangyan
 * @date 2020/5/6 14:57
 */
/*
    java.io.FileInputStream 类是InputStream类的子类,以字节为单位,读取数据

    构造方法:
            FileInputStream(File file) ： 创建字节输入流对象,通过File对象关联数据源文件路径
            FileInputStream(String name) ： 创建字节输入流对象,通过String对象关联数据源文件路径
        注意:
            当你创建一个流对象时，必须传入一个文件路径
            该路径下，如果没有该文件,会抛出 FileNotFoundException,不会自动创建

    成员方法:
            public void close() ：关闭此输入流并释放与此流相关联的任何系统资源
            public abstract int read() ： 读取一个字节数据
            public int read(byte[] b) ：  从输入流中读取一些字节数，并将它们存储到字节数组 b中
                                          返回值是 读取到的字节个数, 读不到就返回 -1
 */
public class Test2_FileInputStream类读取一个字节数据 {
    public static void main(String[] args) throws Exception {
        /*
        //构造方法
        //1.File对象方式
        File file1 = new File("Demo02\\aaa\\a.txt");
        FileInputStream fis1 = new FileInputStream(file1);

        //2.String方式
        FileInputStream fis2 = new FileInputStream("Demo02\\aaa\\a.txt");
        */

        //成员方法
        //假设 a.txt文件里是abcdefg,占7个字节
        //文本中char1个字节够存放,java程序内规定是2个字节

        //1.读一个字节
        //创建字节输入流对象,关联数据源文件
        FileInputStream fis = new FileInputStream("Demo02\\aaa\\a.txt");
        //读取数据
        int read1 = fis.read();
        System.out.println(read1); // 97

        char read2 = (char) fis.read();
        System.out.println(read2); // b

        //循环读取 while
        //读取到结尾,如果再次读取 会return -1

        //while(fis.read() != -1){int len = fis.read(); len.sout} 存在错误,判断条件后还会第二次调用read 只会输出98 100 102 -1
        //固定格式!
        int len;
        while ((len = fis.read()) != -1){
            System.out.println(len);
        }
        //99
        //100
        //101
        //102
        //103
        //a b已经读取过了

        //关闭流释放资源
        fis.close();

    }
}
